package com.ruoyi.system.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.SpffUserRelationsMapper;
import com.ruoyi.system.domain.SpffUserRelations;
import com.ruoyi.system.service.ISpffUserRelationsService;

/**
 * 用户关系Service业务层处理
 * 
 * @author xjj
 * @date 2025-09-11
 */
@Service
public class SpffUserRelationsServiceImpl implements ISpffUserRelationsService 
{
    @Autowired
    private SpffUserRelationsMapper spffUserRelationsMapper;

    /**
     * 查询用户关系
     * 
     * @param id 用户关系主键
     * @return 用户关系
     */
    @Override
    public SpffUserRelations selectSpffUserRelationsById(Long id)
    {
        return spffUserRelationsMapper.selectSpffUserRelationsById(id);
    }

    /**
     * 查询用户关系列表
     * 
     * @param spffUserRelations 用户关系
     * @return 用户关系
     */
    @Override
    public List<SpffUserRelations> selectSpffUserRelationsList(SpffUserRelations spffUserRelations)
    {
        return spffUserRelationsMapper.selectSpffUserRelationsList(spffUserRelations);
    }

    /**
     * 新增用户关系
     * 
     * @param spffUserRelations 用户关系
     * @return 结果
     */
    @Override
    public int insertSpffUserRelations(SpffUserRelations spffUserRelations)
    {
        return spffUserRelationsMapper.insertSpffUserRelations(spffUserRelations);
    }

    /**
     * 修改用户关系
     * 
     * @param spffUserRelations 用户关系
     * @return 结果
     */
    @Override
    public int updateSpffUserRelations(SpffUserRelations spffUserRelations)
    {
        return spffUserRelationsMapper.updateSpffUserRelations(spffUserRelations);
    }

    /**
     * 批量删除用户关系
     * 
     * @param ids 需要删除的用户关系主键
     * @return 结果
     */
    @Override
    public int deleteSpffUserRelationsByIds(Long[] ids)
    {
        return spffUserRelationsMapper.deleteSpffUserRelationsByIds(ids);
    }

    /**
     * 删除用户关系信息
     * 
     * @param id 用户关系主键
     * @return 结果
     */
    @Override
    public int deleteSpffUserRelationsById(Long id)
    {
        return spffUserRelationsMapper.deleteSpffUserRelationsById(id);
    }

    /**
     * 根据用户ID和目标用户ID查询关注关系
     * 
     * @param userId 用户ID
     * @param targetUserId 目标用户ID
     * @param relationType 关系类型
     * @return 关注关系
     */
    @Override
    public SpffUserRelations selectByUserIdAndTargetUserId(Long userId, Long targetUserId, Integer relationType)
    {
        Map<String, Object> params = new HashMap<>();
        params.put("userId", userId);
        params.put("targetUserId", targetUserId);
        params.put("relationType", relationType);
        return spffUserRelationsMapper.selectByUserIdAndTargetUserId(params);
    }

    /**
     * 查询用户的粉丝列表
     * 
     * @param params 参数map
     * @return 粉丝列表
     */
    @Override
    public List<SpffUserRelations> selectFollowersByUserId(Map<String, Object> params)
    {
        return spffUserRelationsMapper.selectFollowersByUserId(params);
    }

    /**
     * 统计用户的粉丝数量
     * 
     * @param userId 用户ID
     * @return 粉丝数量
     */
    @Override
    public int countFollowersByUserId(Long userId)
    {
        return spffUserRelationsMapper.countFollowersByUserId(userId);
    }

    /**
     * 查询用户的关注列表
     * 
     * @param params 参数map
     * @return 关注列表
     */
    @Override
    public List<SpffUserRelations> selectFollowingByUserId(Map<String, Object> params)
    {
        return spffUserRelationsMapper.selectFollowingByUserId(params);
    }

    /**
     * 统计用户的关注数量
     * 
     * @param userId 用户ID
     * @return 关注数量
     */
    @Override
    public int countFollowingByUserId(Long userId)
    {
        return spffUserRelationsMapper.countFollowingByUserId(userId);
    }

    /**
     * 删除关注关系
     * 
     * @param userId 用户ID
     * @param targetUserId 目标用户ID
     * @param relationType 关系类型
     * @return 结果
     */
    @Override
    public int deleteByUserIdAndTargetUserId(Long userId, Long targetUserId, Integer relationType)
    {
        Map<String, Object> params = new HashMap<>();
        params.put("userId", userId);
        params.put("targetUserId", targetUserId);
        params.put("relationType", relationType);
        return spffUserRelationsMapper.deleteByUserIdAndTargetUserId(params);
    }
}
